/**
 *  Copyright (c) 2007 - 2009 Adobe
 *  All rights reserved.
 *
 *  Permission is hereby granted, free of charge, to any person obtaining
 *  a copy of this software and associated documentation files (the "Software"),
 *  to deal in the Software without restriction, including without limitation
 *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
 *  and/or sell copies of the Software, and to permit persons to whom the
 *  Software is furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included
 *  in all copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 *  IN THE SOFTWARE.
 */
package com.adobe.txi.todo.application
{
    import com.adobe.txi.todo.domain.TodoItem;
    import com.adobe.txi.todo.domain.TodoModel;
    
    import mx.collections.ArrayCollection;

    public class TodoListController
    {
        private var _todoModel:TodoModel;

        [Bindable]
        [CommandStatus(type="com.adobe.txi.todo.application.GetTodoListMessage")]
        public var getAllInProgress:Boolean;

        [Bindable]
        [PublishSubscribe(objectId="currentTodoItem")]
        public var currentTodoItem:TodoItem;

        [Bindable]
        [Subscribe(objectId="todos")]
        public var todos:ArrayCollection;

        [MessageDispatcher]
        public var dispatcher:Function;

        [Init]
        public function initialize():void
        {
            getAll();
        }

        [Inject]
        public function set todoModel(value:TodoModel):void
        {
            _todoModel = value;
        }

        public function getAll():void
        {
            //reset the current list
            _todoModel.todos = null;

            //call server operation
            dispatcher(new GetTodoListMessage());
        }

        public function addNewTodoItem():void
        {
            var newTodoItem:TodoItem = _todoModel.createNewTodoItem();

            currentTodoItem = newTodoItem;
        }
		
		public function deleteItem(todoItem:TodoItem):void
		{
			//call server operation
            dispatcher(new RemoveTodoItemMessage(todoItem));
		}


    }
}